package planes
import comunicaciones.Comunicacion
import comunicaciones.Empresa
import comunicaciones.LlamadaLocal
import comunicaciones.LlamadaLargaDistancia
import comunicaciones.MensajeDeTexto
import java.util.Date

trait Plan {

  def precioComunicacion(comunicacion: Comunicacion): Double = {
    
    comunicacion match {
      
      case LlamadaLocal(fecha, nroDestino, duracion) => casoLlamadaLocal(comunicacion, fecha, nroDestino, duracion)
      case LlamadaLargaDistancia(fecha, nroDestino, duracion, origen, destino) => casoLlamadaLargaDistancia(comunicacion, fecha, nroDestino, duracion, origen, destino)
      case MensajeDeTexto(fecha, nroDestino, longitud) => casoSMS(comunicacion, fecha, nroDestino, longitud)
      
    }
    
    
  }
  
  def precioComunicaciones(comunicaciones: List[Comunicacion]): Double = {
    
    comunicaciones.foldLeft(0.0)((a,b) => a + precioComunicacion(b))
    
  }
  
  def casoLlamadaLocal(comunicacion: Comunicacion, fecha: Date, nroDestino: Double, duracion: Int): Double = Empresa.valorComunicacion(comunicacion)
  def casoLlamadaLargaDistancia(comunicacion: Comunicacion, fecha: Date, nroDestino: Double, duracion: Int, origen: String, destino: String): Double = Empresa.valorComunicacion(comunicacion)
  def casoSMS(comunicacion: Comunicacion, fecha: Date, nroDestino: Double, longitud: Int): Double = Empresa.valorComunicacion(comunicacion)
  
  def precioPlan = 10
  
}